package persistentie;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import domein.Medewerker;

public class MedewerkerMapper extends Mapper
{
/*Attributen*/
	private final static String SELECTEER_MEDEWERKERS = "SELECT * FROM medewerkers";
	private final static String TOEVOEGEN_MEDEWERKER = "INSERT INTO medewerkers (medewerkerNaam,medewerkerPaswoord,bestelplaats,taal,rechten) VALUES(?,?,?,?,?)";
	private final static String UPDATE_MEDEWERKER = "UPDATE medewerkers SET medewerkerNaam = ?, medewerkerPaswoord = ?, bestelplaats = ?, taal = ?, rechten = ? WHERE medewerkerId = ?";
	private final static String VERWIJDER_MEDEWERKER = "DELETE FROM medewerkers WHERE medewerkerId = ?";
	private final static String LAATST_INVOERDE_MEDEWERKER = "SELECT medewerkerId FROM medewerkers ORDER BY medewerkerId DESC";

/*Methodes*/
	public List<Medewerker> geefMedewerkers()
	{
		List<Medewerker> gebruikersLijst = new ArrayList<Medewerker>();
		verbinding = PersistentieController.getInstance().getVerbinding();

		try
		{
			statement = verbinding.createStatement();
			resultaat = statement.executeQuery(SELECTEER_MEDEWERKERS);
			
			while (resultaat.next())
			{
				int gebruikersId = resultaat.getInt("medewerkerId");
				String gebruikersNaam = resultaat.getString("medewerkerNaam");
				String gebruikersPaswoord = resultaat.getString("medewerkerPaswoord");
				String bestelplaats = resultaat.getString("bestelplaats");
				int taal = resultaat.getInt("taal");
				boolean rechten = resultaat.getBoolean("rechten");

				Medewerker gebruiker = new Medewerker(gebruikersId,gebruikersNaam,
						gebruikersPaswoord, bestelplaats, taal, rechten);
				gebruikersLijst.add(gebruiker);
			}
			return gebruikersLijst;
		} 
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closeStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return null;
	}
	public void voegMedewerkerToe(Medewerker medewerker)
	{
		verbinding = PersistentieController.getInstance().getVerbinding();
		initQuery(TOEVOEGEN_MEDEWERKER);
		
		try {
			pStatement.setString(1, medewerker.getMedewerkerNaam());
			pStatement.setString(2, medewerker.getMedewerkerPaswoord());
			pStatement.setInt(3,Integer.parseInt(medewerker.getBestelplaats()));//voorlopig!
			pStatement.setInt(4, medewerker.getTaal());
			pStatement.setBoolean(5, medewerker.isRechten());
			pStatement.executeUpdate();
			
		/*Ophalen laatste id >> nog niet optimaal*/			
			medewerker.setMedewerkerId(this.haalLaatstIngevoegdId(LAATST_INVOERDE_MEDEWERKER));
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closePreparedStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	public void wijzigMedewerker(Medewerker medewerker)
	{
		verbinding = PersistentieController.getInstance().getVerbinding();
		initQuery(UPDATE_MEDEWERKER);
		
		try {
			pStatement.setString(1, medewerker.getMedewerkerNaam());
			pStatement.setString(2, medewerker.getMedewerkerPaswoord());
			pStatement.setInt(3,Integer.parseInt(medewerker.getBestelplaats()));//voorlopig!
			pStatement.setInt(4, medewerker.getTaal());
			pStatement.setBoolean(5, medewerker.isRechten());
			pStatement.setInt(6, medewerker.getMedewerkerId());
			pStatement.executeUpdate();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closePreparedStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	public void verwijderMedewerker(Medewerker medewerker)
	{
		verbinding = PersistentieController.getInstance().getVerbinding();
		initQuery(VERWIJDER_MEDEWERKER);
		
		try {
			pStatement.setInt(1, medewerker.getMedewerkerId());
			pStatement.executeUpdate();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				this.closePreparedStatement();
				this.closeConnection();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}
